package com.jeesite.modules.dataScreen.dao;

import cn.hutool.core.date.DateTime;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jeesite.modules.dataScreen.domain.alarm.AlarmFormDto;
import com.jeesite.modules.dataScreen.web.vo.alarm.*;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

@DS("sjtb-db")
public interface HotConcernDao {

    /**
     * alarm 事项构成
     */
    List<AlarmFormDto> getAlarm(@Param("deptCodes") List<String> deptCodes, @Param("currentAt") DateTime currentAt);

    List<AlarmFormDto> getAlarm12122(@Param("currentAt") DateTime currentAt);

    List<AlarmFormDto> getAlarm12345(@Param("currentAt") DateTime currentAt);

    Long getAlarmCount(@Param("startTime") DateTime startTime, @Param("endTime") DateTime endTime, @Param("type") String type);

    Map<String, Long> getAlarm12122CountMap(@Param("startTime") DateTime startTime, @Param("endTime") DateTime endTime);

    Long getAlarm12122Count(@Param("startTime") DateTime startTime, @Param("endTime") DateTime endTime, @Param("type") String type);

    Long getAlarm12345Count(@Param("startTime") DateTime startTime, @Param("endTime") DateTime endTime, @Param("type") String type);

    List<ComplaintConsultVo> getComplaintConsult(@Param("code") String code, @Param("type") String type, @Param("showData") Date showData);

    List<FollowEventVo> getFollowEvent(@Param("showData") Date showData);

    @MapKey("hours")
    Map<Integer, JSONObject> getFollwEventMap(@Param("startTIme") DateTime startTime, @Param("endTime") DateTime endTime, @Param("currentAt") Date currentAt);

    List<EveryModuleVo> getEveryModule(@Param("showData") Date showData);

    /**
     * @param page       分页
     * @param acceptunit 单位 高速 出租车
     * @param event      事件  咨询，投诉
     * @param overtime   不为空就查询超时数据
     * @param evaluate   不为空就查询差评数据
     * @return
     */
    IPage<EveryModuleListVo> getEveryModuleList(Page<EveryModuleListVo> page, @Param("acceptunit") String acceptunit, @Param("event") String event, @Param("overtime") String overtime, @Param("evaluate") Integer evaluate, @Param("showData") Date showData, @Param("orderId") String orderId, @Param("showAll") boolean showAll);

    List<EnentOvertimeListPieVo> getItemConstitutePie();

    List<EnentOvertimeListPieVo> getEventConstitutePie1();

    List<EnentOvertimeListPieVo> getEventConstitutePie2();

    List<EnentOvertimeListPieVo> getEventConstitutePie3();

    int getGaoSU1();

    int getGaoSU2();

    int getGaoSU3();

    List<JSONObject> getEveryPie(@Param("pieType") Integer pieType, @Param("dept") String name, @Param("showDate") DateTime date);

    @MapKey("name")
    Map<String, JSONObject> getTopMonthDataMap(@Param("code") String code, @Param("type") String type, @Param("startTIme") DateTime startTime, @Param("endTime") DateTime endTime, @Param("currentAt") Date currentAt);

    List<JSONObject> evaluateListPie(@Param("type") Integer type, @Param("startTime") DateTime startTime, @Param("endTime") DateTime endTime);

    List<EveryModuleDetailVo> detail(@Param("myid") String myid, @Param("detailType") Integer detailType);

    JSONObject getOneByIdAndType(@Param("id") String id, @Param("type") Integer type);

    JSONObject getTopMonthAvgData(@Param("start") DateTime start,
                                         @Param("end") DateTime end,
                                         @Param("topCurrentAt") DateTime topCurrentAt);
}
